LINQ (Language Integrated Query) এর মাধ্যমে আপনি complex queries করতে পারেন এবং navigation properties ব্যবহার করে relational data সম্পর্কিত তথ্য পরিচালনা করতে পারেন। এর মাধ্যমে আপনি বিভিন্ন টেবিল বা ক্লাসের মধ্যে সম্পর্ক (relationships) খুঁজে বের করতে পারেন এবং প্রাসঙ্গিক ডেটা একত্রিত করতে পারেন।
Complex Queries
LINQ তে complex queries বলতে বোঝানো হয় একাধিক শর্তের মধ্যে তথ্য অনুসন্ধান, বিভিন্ন অপারেশন একত্রে ব্যবহার করা, বা ডেটা ফিল্টারিং, গ্রুপিং এবং অর্ডারিং একত্রে করা। LINQ তে complex queries তৈরি করতে সাধারণত from, where, select, group by, order by, join, let ইত্যাদি কিওয়ার্ড ব্যবহার করা হয়।
উদাহরণ:
ধরা যাক, আমাদের দুটি তালিকা রয়েছে — একটিতে Employee ক্লাসের তথ্য এবং অন্যটিতে Department ক্লাসের তথ্য। এখন, আমরা কর্মীদের তথ্য ডিপার্টমেন্টের নামে সাজিয়ে দেখব।
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public int DepartmentId { get; set; }
}
public class Department
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
}
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Alice", Age = 30, DepartmentId = 1 },
new Employee { Name = "Bob", Age = 25, DepartmentId = 2 },
new Employee { Name = "Charlie", Age = 35, DepartmentId = 1 }
};
List<Department> departments = new List<Department>
{
new Department { DepartmentId = 1, DepartmentName = "HR" },
new Department { DepartmentId = 2, DepartmentName = "IT" }
};
// Complex query: Join Employee এবং Department ক্লাসের ডেটা
var query = from emp in employees
join dept in departments on emp.DepartmentId equals dept.DepartmentId
orderby dept.DepartmentName
select new { emp.Name, emp.Age, dept.DepartmentName };
foreach (var item in query)
{
Console.WriteLine($"Name: {item.Name}, Age: {item.Age}, Department: {item.DepartmentName}");
}
এখানে:
joinকিওয়ার্ড ব্যবহার করেEmployeeএবংDepartmentক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়েছে।orderbyদ্বারা ডিপার্টমেন্টের নাম অনুযায়ী কর্মীদের সাজানো হয়েছে।
আউটপুট:
Name: Alice, Age: 30, Department: HR
Name: Charlie, Age: 35, Department: HR
Name: Bob, Age: 25, Department: IT
এটি একটি complex query উদাহরণ যেখানে একাধিক শর্তের মধ্যে ডেটা সংগ্রহ করা হয়েছে এবং বিভিন্ন অপারেশন একত্রে ব্যবহার করা হয়েছে।
Navigation Properties
Navigation properties একটি ORM (Object-Relational Mapping) সিস্টেমের মাধ্যমে এক ক্লাস বা টেবিলের মধ্যে সম্পর্কিত অন্যান্য ক্লাস বা টেবিলের তথ্য প্রদর্শন করতে ব্যবহৃত হয়। Entity Framework (EF) Core এর মাধ্যমে, আপনি navigation properties ব্যবহার করে একটি ক্লাসের মধ্যে সম্পর্কিত অন্য ক্লাসের ডেটা রিট্রিভ করতে পারেন।
ধরা যাক, আমাদের একটি Student এবং Course ক্লাস আছে এবং আমরা জানি যে, এক ছাত্র একাধিক কোর্সে ভর্তি হতে পারে। এখানে Student এবং Course এর মধ্যে one-to-many relationship রয়েছে।
উদাহরণ:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; } // Navigation property
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public int StudentId { get; set; }
public Student Student { get; set; } // Navigation property
}
List<Student> students = new List<Student>
{
new Student { StudentId = 1, Name = "Alice", Courses = new List<Course> {
new Course { CourseId = 1, CourseName = "Math" },
new Course { CourseId = 2, CourseName = "English" }
}},
new Student { StudentId = 2, Name = "Bob", Courses = new List<Course> {
new Course { CourseId = 3, CourseName = "Physics" },
new Course { CourseId = 4, CourseName = "Chemistry" }
}}
};
// Navigation property ব্যবহার করে Student এর Courses দেখতে হবে
var query = from student in students
select new
{
student.Name,
Courses = student.Courses.Select(c => c.CourseName)
};
foreach (var item in query)
{
Console.WriteLine($"Student: {item.Name}");
foreach (var course in item.Courses)
{
Console.WriteLine($" Course: {course}");
}
}
এখানে:
Coursesহল একটি navigation property যাStudentক্লাসের মধ্যে সম্পর্কিতCourseক্লাসের তথ্য ধরে রাখে।student.Courses.Select(c => c.CourseName)ব্যবহার করে, ছাত্রদের কোর্সের নাম বের করা হচ্ছে।
আউটপুট:
Student: Alice
Course: Math
Course: English
Student: Bob
Course: Physics
Course: Chemistry
এখানে Courses প্রপার্টি Student ক্লাসের navigation property, যা Student এবং Course ক্লাসের মধ্যে সম্পর্কিত তথ্য তুলে ধরছে।
One-to-Many Relationship Example (Navigation Properties)
Entity Framework এ One-to-Many সম্পর্কের মধ্যে Student এবং Course ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়, যেখানে একটি ছাত্র একাধিক কোর্সে ভর্তি হতে পারে।
Entity Framework Core ব্যবহার করার সময়:
public class ApplicationDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(s => s.Courses)
.WithOne(c => c.Student)
.HasForeignKey(c => c.StudentId);
}
}
এখানে:
HasMany(s => s.Courses)বলে, একটিStudentএর অনেকগুলোCourseথাকতে পারে।WithOne(c => c.Student)বলে, প্রতিটিCourseএর একটিমাত্রStudentথাকতে হবে।
Complex Query with Navigation Properties
এখন, যদি আপনি complex query করতে চান যেখানে navigation properties ব্যবহার করা হচ্ছে, যেমন, সমস্ত ছাত্র এবং তাদের কোর্সের নাম বের করতে:
var query = from student in students
select new
{
student.Name,
Courses = student.Courses.Select(c => c.CourseName)
};
foreach (var item in query)
{
Console.WriteLine($"Student: {item.Name}");
foreach (var course in item.Courses)
{
Console.WriteLine($" Course: {course}");
}
}
এখানে, Student এর Courses নামক navigation property ব্যবহার করে ছাত্রদের কোর্সের নাম বের করা হয়েছে।
সারাংশ
- Complex Queries: LINQ তে একাধিক অপারেশন একত্রে ব্যবহার করে জটিল প্রশ্ন করা যায়, যেমন join, group by, orderby, let, এবং select।
- Navigation Properties: Entity Framework এ, navigation properties ব্যবহৃত হয় এক ক্লাস থেকে আরেক ক্লাসের সাথে সম্পর্কিত ডেটা পরিচালনা করতে। One-to-Many বা Many-to-Many সম্পর্কের ক্ষেত্রে এটি অত্যন্ত গুরুত্বপূর্ণ।
এটি ডেটাবেসের মধ্যে সম্পর্কিত তথ্যকে কোয়েরি করার এবং সম্পর্কিত ডেটা একত্রিত করার একটি শক্তিশালী পদ্ধতি।
Read more